package com.ledi.guns.common.persistence.dao;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Param;

import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.ledi.guns.common.persistence.model.BillDetail;
import com.ledi.guns.common.persistence.model.vo.AgentStatisticalDataVo;
import com.ledi.guns.common.persistence.model.vo.BillDetailVo;
import com.ledi.guns.common.persistence.model.vo.CurrentFlowDataVo;
import com.ledi.guns.common.persistence.model.vo.DayOrHourChargeCountVo;
import com.ledi.guns.modular.ledipay.controller.req.ScanCode.QueryDetailInfo;

/**
 * <p>
 * Mapper 接口
 * </p>
 *
 * @author ledi
 * @since 2017-11-30
 */
public interface BillDetailMapper extends BaseMapper<BillDetail> {

	int getBillDetailCount(Map<String, Object> search);

	List<BillDetailVo> getBillDetailList(Page<BillDetailVo> page, Map<String, Object> search);

	BillDetailVo getBillDetaileById(Long id);

	/**
	 * 获取总流水
	 *
	 * @param map
	 * @return
	 */
	BigDecimal getFlowByDate(Map<String, Object> map);

	/**
	 * 获取当天的流水
	 *
	 * @param dayTime
	 * @return
	 */
	BigDecimal getFlowByDay(Date dayTime);

	/**
	 * 获取当前流水统计
	 *
	 * @param startTime
	 * @param endTime
	 * @return
	 */
	List<CurrentFlowDataVo> getCurrentFlowNum(@Param("startTime") Date startTime, @Param("endTime") Date endTime,
			@Param("agentId") Long agentId);

	/**
	 * 通过代理商ID来筛选流水
	 *
	 * @param agentId
	 * @return
	 */
	BigDecimal getFlowByAgentId(@Param("agentId") Long agentId);

	/**
	 * 获取总流水
	 *
	 * @return
	 */
	BigDecimal getTotalCount();

	QueryDetailInfo findDetailInfo(String billDetailId);

	/**
	 * 方法描述: [根据时间段获取流水细节.]<br/>
	 * 初始作者: 钟小平<br/>
	 * 创建日期: 2018年7月11日-下午6:11:09<br/>
	 * 开始版本: 2.0.0<br/>
	 * =================================================<br/>
	 * 修改记录：<br/>
	 * 修改作者 日期 修改内容<br/>
	 * ================================================<br/>
	 * 
	 * @param param
	 * @return
	 *         AgentStatisticalDataVo
	 */
	AgentStatisticalDataVo findCountByParam(Map<String, Object> param);

	/**
	 * 方法描述: [根据时间段获取账单.]<br/>
	 * 初始作者: 钟小平<br/>
	 * 创建日期: 2018年7月19日-下午7:56:10<br/>
	 * 开始版本: 2.0.0<br/>
	 * =================================================<br/>
	 * 修改记录：<br/>
	 * 修改作者 日期 修改内容<br/>
	 * ================================================<br/>
	 * 
	 * @param oneDay
	 * @param schoolId
	 * @param flag
	 * @return
	 *         DayOrHourChargeCountVo
	 */
	DayOrHourChargeCountVo billSuccessStatistics(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("schoolId") Long schoolId);

	int countSchool(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("schoolIds") List<Long> schoolIds);

	void insertBatch(List<BillDetail> listBillDetill);
}
